package com.hlkj.pay.service.pay;
/*
 * Hlpay-Plus aggregate payment system.
 * Copyright (c) 2024-2025 Hlpay Team Copyright has the right of final interpretation.
 */

import com.hlkj.framework.common.pojo.PageResult;
import com.hlkj.pay.dto.pay.ProviderQueryDto;
import com.hlkj.pay.infrastructure.model.pay.ProviderChannelConfigDO;
import com.hlkj.pay.infrastructure.model.pay.ProviderChannelFeeConfigDO;
import com.hlkj.pay.infrastructure.model.pay.ProviderInfoDO;

import java.util.List;
/**
 * @author HlpayTeam
 * @date 2024/09/23 16:29
 */
public interface IProviderService {
	/**
	 * page
	 * @param payWayQueryDO
	 * @return
	 */
	PageResult<ProviderInfoDO> queryPage(ProviderQueryDto payWayQueryDO);
	/**
	 * list
	 * @param payWayQueryDO
	 * @return
	 */
	List<ProviderInfoDO> queryList(ProviderQueryDto payWayQueryDO);
	/**
	 * query by code
	 * @param code
	 * @return
	 */
	ProviderInfoDO queryByCode(String code);
	/**
	 * query by code
	 * @param codes
	 * @return
	 */
	List<ProviderInfoDO> queryByCodes(List<String> codes);
	/**
	 * query by code
	 * @param name
	 * @return
	 */
	ProviderInfoDO queryByName(String name);
	/**
	 * query by id
	 * @param id
	 * @return
	 */
	ProviderInfoDO queryById(Long id);
	/**
	 * query fee config
	 * @param providerCodes
	 * @return
	 */
	List<ProviderChannelFeeConfigDO> queryEffectFeeConfig(List<String> providerCodes, List<String> channelCodeList);
	/**
	 * query fee config
	 * @param providerCode
	 * @param channelCode
	 * @return
	 */
	List<ProviderChannelFeeConfigDO> queryFeeConfig(String providerCode, String channelCode);
	/**
	 * query config
	 * @param providerCode
	 * @param channelCode
	 * @return
	 */
	ProviderChannelConfigDO queryConfig(String providerCode, String channelCode);
	/**
	 * query config
	 * @param providerCode
	 * @return
	 */
	List<ProviderChannelConfigDO> queryConfigList(String providerCode);
	/**
	 * query config
	 * @param providerCode
	 * @return
	 */
	List<ProviderChannelConfigDO> queryConfigListByChannel(String channelCode);
	/**
	 * save
	 * @param providerInfoDO
	 */
	void save(ProviderInfoDO providerInfoDO);
	/**
	 * update
	 * @param providerInfoDO
	 */
	void update(ProviderInfoDO providerInfoDO);
	/**
	 * del
	 * @param id
	 */
	void delProviderInfo(String code);
	/**
	 * save config
	 * @param providerChannelConfigDO
	 */
	void saveConfig(ProviderChannelConfigDO providerChannelConfigDO);
	/**
	 * update config
	 * @param providerChannelConfigDO
	 */
	void updateConfig(ProviderChannelConfigDO providerChannelConfigDO);
	/**
	 * del fee config
	 * @param providerCode
	 * @param channelCode
	 */
	void delFeeConfig(String providerCode, String channelCode);
	/**
	 * batch save fee config
	 * @param finalChannelFeeConfigList
	 */
	void batchSaveFeeConfig(List<ProviderChannelFeeConfigDO> finalChannelFeeConfigList);
}
